package com.zhiyou100.poi;

import lombok.SneakyThrows;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 读取 Excel
 *
 * @author yang
 * @version 1.0.0
 * @date 2020-09-14 11:29
 */
public class Test02ReadExcel {
    @SneakyThrows
    public static void main(String[] args) {
        // FileInputStream HSSFWorkbook 都可以自动关流
        try (// 创建输入流关联 Excel 源文件
             final FileInputStream fileInputStream = new FileInputStream("/Users/yang/Documents/git/java/learn/web-art/poi/src/main/resources/excel/student01.xls");
             // 创建 HSSFWorkbook 对象，关联源文件对应的输入流
             final HSSFWorkbook book = new HSSFWorkbook(fileInputStream)) {
            // 获取所有工作表的数量
            final int numberOfSheets = book.getNumberOfSheets();
            System.out.println("工作表的个数 ： " + numberOfSheets);

            // 遍历每个工作表
            for (Sheet sheet : book) {
                // 遍历每一行
                for (Row rows : sheet) {
                    // 遍历每个单元格
                    for (Cell cell : rows) {
                        // 判断单元格的数据的类型
                        switch (cell.getCellTypeEnum()) {
                            // number 类型，包括 整数、小数、日期
                            // Numeric cell type (whole numbers, fractional numbers, dates)
                            case NUMERIC:
                                // 判断是不是日期
                                if (HSSFDateUtil.isCellDateFormatted(cell)) {
                                    final Date dateCellValue = cell.getDateCellValue();
                                    System.out.println("date 类型：" + dateCellValue.toLocaleString());
                                    // 不是日期就是 整数或者小数
                                } else {
                                    final double numericCellValue = cell.getNumericCellValue();
                                    System.out.println("数字类型 ：" + numericCellValue);
                                }
                                break;
                            // 字符串或者文本类型
                            // String (text) cell type
                            case STRING:
                                final String stringCellValue = cell.getStringCellValue();
                                System.out.println("String 类型 " + stringCellValue);
                                break;
                            //    空白单元格类型
                            //    Blank cell type
                            case BLANK:
                                System.out.println("空白单元格类型");
                                break;
                            //  公式单元格类型
                            //    Formula cell type
                            case FORMULA:
                                final String cellFormula = cell.getCellFormula();
                                System.out.println("公式单元格类型 ：" + cellFormula);
                                break;
                            //  布尔单元格类型
                            // Boolean cell type
                            case BOOLEAN:
                                final boolean booleanCellValue = cell.getBooleanCellValue();
                                System.out.println("布尔类型 " + booleanCellValue);
                                break;
                            default:
                                System.out.println("啥也不是");
                        }
                    }
                    System.out.println("---------");
                }
            }
        }

    }
}
